package co.edu.eam.laapuesta.persistencia.dao;

import java.util.List;

import javax.persistence.Query;
import javax.persistence.EntityManager;

import co.edu.eam.laapuesta.persistencia.entidades.Cliente;
import co.edu.eam.laapuesta.persistencia.entidades.Empleado;
import co.edu.eam.laapuesta.persistencia.entidades.Persona;
import co.edu.eam.laapuesta.persistencia.idao.ClienteIDAO;

public class ClienteDAO implements ClienteIDAO {

	private EntityManager em;
	
	
	public ClienteDAO(EntityManager em) {
		super();
		this.em = em;
	}

	@Override
	public void registrarCliente(Cliente cliente) {
		// TODO Auto-generated method stub
		em.persist(cliente);
	}

	@Override
	public Cliente buscarCliente(int id) {
		// TODO Auto-generated method stub
		Persona p=em.find(Persona.class,id);
		Cliente c=new Cliente();
		c.setPersona(p);
		return c;
	}

	@Override
	public Cliente buscarClienteByCedula(int cedula) {
		// TODO Auto-generated method stub
		Query q = em.createNamedQuery(Cliente.CONSULTA_BUSCAR_CLIENTE_BY_CEDULA);
		q.setParameter(Cliente.PARAMETRO_CEDULA_CLIENTE, cedula);
		return (Cliente) q.getSingleResult();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Cliente> buscarClienteByNombre(String nombre) {
		// TODO Auto-generated method stub
		Query q = em.createNamedQuery(Cliente.CONSULTA_BUSCAR_CLIENTE_BY_NOMBRE);
		q.setParameter(Cliente.PARAMETRO_NOMBRE_CLIENTE, nombre);
		return  q.getResultList();
	}

	@Override
	public void actualizarCliente(Cliente cliente) {
		// TODO Auto-generated method stub
		em.merge(cliente);
	}

	@Override
	public void eliminarCliente(Cliente cliente) {
		// TODO Auto-generated method stub
		em.remove(cliente);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Cliente> listarClientes() {
		// TODO Auto-generated method stub
		Query q= em.createNamedQuery(Cliente.FIND_ALL);
		return q.getResultList();
	}

	@Override
	public Cliente buscarClienteByUsuario(String usuario) {
		// TODO Auto-generated method stub
		Query q = em.createNamedQuery(Cliente.CONSULTA_BUSCAR_CLIENTE_BY_USUARIO);
		q.setParameter(Cliente.PARAMETRO_USUARIO_CLIENTE, usuario);
		return (Cliente) q.getSingleResult();
	}

	@Override
	public void registrarEmpleado(Empleado empl) {
		// TODO Auto-generated method stub
		em.persist(empl);
	}

	@Override
	public Empleado buscarEmpleado(int id) {
		// TODO Auto-generated method stub
		
		return em.find(Empleado.class, id);
	}

	@Override
	public Empleado buscarEmpleadoByCedula(int cedula) {
		// TODO Auto-generated method stub
		Query q = em.createNamedQuery(Empleado.CONSULTA_BUSCAR_EMPLEADO_BY_CEDULA);
		q.setParameter(Empleado.PARAMETRO_CEDULA_EMPLEADO, cedula);
		return (Empleado) q.getSingleResult();
	}

	@Override
	public Empleado buscarEmpleadoByUsuario(String usuario) {
		// TODO Auto-generated method stub
		Query q=em.createNamedQuery(Empleado.CONSULTA_BUSCAR_EMPLEADO_BY_USUARIO);
		q.setParameter(Empleado.CONSULTA_BUSCAR_EMPLEADO_BY_USUARIO, usuario);
		return (Empleado)q.getSingleResult();
	}

	@Override
	public void actualizarEmpleado(Empleado empleado) {
		// TODO Auto-generated method stub
		em.merge(empleado);
	}

	@Override
	public void eliminarEmpleado(Empleado empleado) {
		// TODO Auto-generated method stub
		em.remove(empleado);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Empleado> listarEmpleados() {
		// TODO Auto-generated method stub
		Query q=em.createNamedQuery(Empleado.FIND_ALL);
		return q.getResultList();
	}

}
